{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Pytorch_Basic.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "authorship_tag": "ABX9TyOmvveEX7Mc3HVLllsUtC9V",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/OUCTheoryGroup/colab_demo/blob/master/02_Pytorch_Basic.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "83OFnkrjFZx1",
        "colab_type": "text"
      },
      "source": [
        "## 什么是 PyTorch ?\n",
        "\n",
        "PyTorch是一个python库，它主要提供了两个高级功能：\n",
        "\n",
        "- GPU加速的张量计算\n",
        "- 构建在反向自动求导系统上的深度神经网络\n",
        "\n",
        "## 1. 定义数据\n",
        "\n",
        "一般定义数据使用torch.Tensor  ， tensor的意思是张量，是数字各种形式的总称"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DWkz2K43FW_d",
        "colab_type": "code",
        "outputId": "e526628b-74d1-413d-f42b-3c3dfdb6731d",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "import torch\n",
        "\n",
        "# 可以是一个数\n",
        "x = torch.tensor(666)\n",
        "print(x)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor(666)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "p4qRIFWARKjY",
        "colab_type": "code",
        "outputId": "526bf9ad-bc1c-4cfb-d7d5-2ac1a9065b08",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 可以是一维数组（向量）\n",
        "x = torch.tensor([1,2,3,4,5,6])\n",
        "print(x)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([1, 2, 3, 4, 5, 6])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "1a4xABr4RM95",
        "colab_type": "code",
        "outputId": "ce50e8ae-e8fd-42b8-f991-477945e575ee",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        }
      },
      "source": [
        "# 可以是二维数组（矩阵）\n",
        "x = torch.ones(2,3)\n",
        "print(x)\n"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[1., 1., 1.],\n",
            "        [1., 1., 1.]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "bh5mcR_fRN_D",
        "colab_type": "code",
        "outputId": "898f392c-9ad9-40c8-f20f-0058c594799e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 138
        }
      },
      "source": [
        "# 可以是任意维度的数组（张量）\n",
        "x = torch.ones(2,3,4)\n",
        "print(x)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[[1., 1., 1., 1.],\n",
            "         [1., 1., 1., 1.],\n",
            "         [1., 1., 1., 1.]],\n",
            "\n",
            "        [[1., 1., 1., 1.],\n",
            "         [1., 1., 1., 1.],\n",
            "         [1., 1., 1., 1.]]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rL_CHhxMJHLC",
        "colab_type": "text"
      },
      "source": [
        "Tensor支持各种各样类型的数据，包括：\n",
        "\n",
        "torch.float32, torch.float64, torch.float16, torch.uint8, torch.int8, torch.int16, torch.int32, torch.int64 。这里不过多描述。\n",
        "\n",
        "创建Tensor有多种方法，包括：ones, zeros, eye, arange, linspace, rand, randn, normal, uniform, randperm, 使用的时候可以在线搜，下面主要通过代码展示。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "L1tPfIm8KHR6",
        "colab_type": "code",
        "outputId": "7e75d425-b545-49e7-e9fa-fc52838d08e4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104
        }
      },
      "source": [
        "# 创建一个空张量\n",
        "x = torch.empty(5,3)\n",
        "print(x)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[1.4178e-36, 0.0000e+00, 4.4842e-44],\n",
            "        [0.0000e+00,        nan, 0.0000e+00],\n",
            "        [1.0979e-05, 4.2008e-05, 2.1296e+23],\n",
            "        [1.0386e+21, 4.4160e-05, 1.0742e-05],\n",
            "        [2.6963e+23, 4.2421e-08, 3.4548e-09]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "j_tf1_ChRTXt",
        "colab_type": "code",
        "outputId": "c5ee1e85-f769-4dec-a886-40bad7c8e31b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104
        }
      },
      "source": [
        "# 创建一个随机初始化的张量\n",
        "x = torch.rand(5,3)\n",
        "print(x)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[0.3077, 0.0347, 0.3033],\n",
            "        [0.9099, 0.2716, 0.4310],\n",
            "        [0.8286, 0.3317, 0.0536],\n",
            "        [0.9529, 0.4905, 0.1403],\n",
            "        [0.6899, 0.8349, 0.4015]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ikJVEFunRWIS",
        "colab_type": "code",
        "outputId": "1b6ab71d-78c4-489b-d185-fdc3b4c108d4",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104
        }
      },
      "source": [
        "# 创建一个全0的张量，里面的数据类型为 long\n",
        "x = torch.zeros(5,3,dtype=torch.long)\n",
        "print(x)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[0, 0, 0],\n",
            "        [0, 0, 0],\n",
            "        [0, 0, 0],\n",
            "        [0, 0, 0],\n",
            "        [0, 0, 0]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Q3VVC7-hRXTa",
        "colab_type": "code",
        "outputId": "cf3aa866-a793-4a8e-8ca4-522038dbb96e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104
        }
      },
      "source": [
        "# 基于现有的tensor，创建一个新tensor，\n",
        "# 从而可以利用原有的tensor的dtype，device，size之类的属性信息\n",
        "y = x.new_ones(5,3)   #tensor new_* 方法，利用原来tensor的dtype，device\n",
        "print(y)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[1, 1, 1],\n",
            "        [1, 1, 1],\n",
            "        [1, 1, 1],\n",
            "        [1, 1, 1],\n",
            "        [1, 1, 1]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nswc8uK0RYZ5",
        "colab_type": "code",
        "outputId": "2c428464-94d5-4840-fa0f-a1cc75afdde6",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 104
        }
      },
      "source": [
        "z = torch.randn_like(x, dtype=torch.float)    # 利用原来的tensor的大小，但是重新定义了dtype\n",
        "print(z)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[ 1.4363, -2.1019,  0.4444],\n",
            "        [-0.4706,  0.7441, -0.4631],\n",
            "        [-1.3860, -1.8919,  1.8794],\n",
            "        [ 1.8617,  0.6469,  0.5235],\n",
            "        [-0.1271, -1.0755,  0.0359]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "O-ry_RGyLRJB",
        "colab_type": "text"
      },
      "source": [
        "## 2. 定义操作\n",
        "\n",
        "凡是用Tensor进行各种运算的，都是Function\n",
        "\n",
        "最终，还是需要用Tensor来进行计算的，计算无非是\n",
        "- 基本运算，加减乘除，求幂求余\n",
        "- 布尔运算，大于小于，最大最小\n",
        "- 线性运算，矩阵乘法，求模，求行列式\n",
        "\n",
        "**基本运算包括：** abs/sqrt/div/exp/fmod/pow ，及一些三角函数 cos/ sin/ asin/ atan2/ cosh，及 ceil/round/floor/trunc 等具体在使用的时候可以百度一下\n",
        "\n",
        "**布尔运算包括：** gt/lt/ge/le/eq/ne，topk, sort, max/min\n",
        "\n",
        "**线性计算包括：** trace, diag, mm/bmm，t，dot/cross，inverse，svd 等\n",
        "\n",
        "不再多说，需要使用的时候百度一下即可。下面用具体的代码案例来学习。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "QcApnoZ4N4a4",
        "colab_type": "code",
        "outputId": "fd0cee26-fd4f-4bf8-da49-6a7054f070d3",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 创建一个 2x4 的tensor\n",
        "m = torch.Tensor([[2, 5, 3, 7],\n",
        "                  [4, 2, 1, 9]])\n",
        "\n",
        "print(m.size(0), m.size(1), m.size(), sep=' -- ')"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "2 -- 4 -- torch.Size([2, 4])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wq-JJbKBRem1",
        "colab_type": "code",
        "outputId": "49a1f1cf-9084-4197-d8e7-88a27c398359",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 返回 m 中元素的数量\n",
        "print(m.numel())"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "8\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "x2CtLybORhuj",
        "colab_type": "code",
        "outputId": "8111e9c9-22c5-40c9-8ecd-f70c4034fb92",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 返回 第0行，第2列的数\n",
        "print(m[0][2])"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor(3.)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "QR-157ITRiuW",
        "colab_type": "code",
        "outputId": "447c0cf8-9f2b-40ad-bc47-a162953b8a97",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 返回 第1列的全部元素\n",
        "print(m[:, 1])"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([5., 2.])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MOjFlSIzRji_",
        "colab_type": "code",
        "outputId": "7e1765e9-2f05-49a4-c821-8769fe979ba6",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 返回 第0行的全部元素\n",
        "print(m[0, :])"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([2., 5., 3., 7.])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "CYK1sia-P7RC",
        "colab_type": "code",
        "outputId": "2fdf0326-43ec-4f53-c7de-0d97c881b95b",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Create tensor of numbers from 1 to 5\n",
        "# 注意这里结果是1到4，没有5\n",
        "v = torch.arange(1, 5)\n",
        "print(v)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([1, 2, 3, 4])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "LN0zTwWNQL70",
        "colab_type": "code",
        "outputId": "f6cfa258-7e84-4a5c-9171-6a2247fea3ff",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Scalar product\n",
        "m @ v"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "tensor([49., 47.])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 15
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "CDzM9atDQXqo",
        "colab_type": "code",
        "outputId": "e70722c5-cd83-42bf-dbe6-4b895a070a49",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# Calculated by 1*2 + 2*5 + 3*3 + 4*7\n",
        "m[[0], :] @ v"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "tensor([49.])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 16
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "cRqlJdm3QeYq",
        "colab_type": "code",
        "outputId": "e8b501dd-d231-4b6c-d18f-ce799131cb7f",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        }
      },
      "source": [
        "# Add a random tensor of size 2x4 to m\n",
        "m + torch.rand(2, 4)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "tensor([[2.2495, 5.7699, 3.3819, 7.0271],\n",
              "        [4.4853, 2.1948, 1.8039, 9.2615]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 17
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Zle6ULwDQoMF",
        "colab_type": "code",
        "outputId": "30cc69f7-d218-4ea2-af54-31f2164770bc",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 155
        }
      },
      "source": [
        "# 转置，由 2x4 变为 4x2\n",
        "print(m.t())\n",
        "\n",
        "# 使用 transpose 也可以达到相同的效果，具体使用方法可以百度\n",
        "print(m.transpose(0, 1))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[2., 4.],\n",
            "        [5., 2.],\n",
            "        [3., 1.],\n",
            "        [7., 9.]])\n",
            "tensor([[2., 4.],\n",
            "        [5., 2.],\n",
            "        [3., 1.],\n",
            "        [7., 9.]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XqdglZAoR0AZ",
        "colab_type": "code",
        "outputId": "2b67ec05-e6f8-4932-e28e-9310586649f5",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 69
        }
      },
      "source": [
        "# returns a 1D tensor of steps equally spaced points between start=3, end=8 and steps=20\n",
        "torch.linspace(3, 8, 20)"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "tensor([3.0000, 3.2632, 3.5263, 3.7895, 4.0526, 4.3158, 4.5789, 4.8421, 5.1053,\n",
              "        5.3684, 5.6316, 5.8947, 6.1579, 6.4211, 6.6842, 6.9474, 7.2105, 7.4737,\n",
              "        7.7368, 8.0000])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 37
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "eAu8SIxEShpd",
        "colab_type": "code",
        "outputId": "95d24488-31a5-43ad-95d9-60aba137a9a8",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 588
        }
      },
      "source": [
        "from matplotlib import pyplot as plt\n",
        "\n",
        "# matlabplotlib 只能显示numpy类型的数据，下面展示了转换数据类型，然后显示\n",
        "# 注意 randn 是生成均值为 0， 方差为 1 的随机数\n",
        "# 下面是生成 1000 个随机数，并按照 100 个 bin 统计直方图\n",
        "plt.hist(torch.randn(1000).numpy(), 100);"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nHQ11NNTRUOe1YfQLk9fzHrIJDXU01NFQR0MdDXVeG0a/MHk97yGb0FBHQx0NdTTU0VDntWH0C9PA\nwEDoEdyjoY6GOhrqaKijoc5rw+gXpv7+/tAjuEdDHQ11NNTRUEdDndeG0S9MtbW1oUdwj4Y6Gupo\nqKOhjoY6rw2jX5j27dsXegT3aKijoY6GOhrqaKjz2nDChWnWrFn23HPP2YEDB6yrq8vuvvtuMzMr\nLy+3Z5991l5++WV78MEHLZFIZHrWSamoqAg9gns01NFQR0MdDXU01HltOOHC9P7779vVV19tK1eu\ntJUrV9r69evt8ssvt+9///t277332rJly+zo0aN2yy23TMe85y2ZTIYewT0a6mioo6GOhjoa6rw2\nPKdPyb333ntmZpZIJCyRSFg6nbarr77afvazn5mZ2a5du6y1tTVzUwq8nveQTWioo6GOhjoa6mio\n89ow18zunugXzZgxw371q1/Z9773PXvwwQftkUcesa9+9av2j//4j+O/5q//+q/tBz/4wcd+3623\n3mr33HOP3XLLLXbHHXfYihUr7JlnnrHW1lYrLCy0hQsX2tq1a+3o0aPW3NxsNTU19vbbb9umTZus\noKDASktLrampyd566y3bsGGDVVZW2tDQkG3cuNESiYQtXbrUrrrqKuvv77fW1lYrKyuzkZER27Bh\ng5mZVVVV2de+9jU7cOCAtba2WmlpqZmZrV+/3lKplK1YscJWr149/vsvuugimzVrlq1bt85OnTpl\nDQ0N1tDQMP76ZDJphYWF1tzcbENDQ3bllVdaXV3d+Oun6zE1NjaOv346HtPGjRtt6dKlUT2m6X47\ntbS0WF9fn5vH9H/u+BdbufFrdtE1m23Tf7/RStZttoUnXpv022lW+WVWWThmlXPH7J2RHLsiOWqJ\no6+f12PasmWLLVy4cIreTteamdnFBadteWHqf82UivLa+93HtHr1aps7d25Uj2m6307f+MY3bGho\nKKrHNN1vp5qaGquqqsrKx3TJJZfYo48+etZdKMfM0hMtTB+aN2+ePfTQQ/btb3/b7rvvPlu2bJmZ\nmS1ZssQee+wxq6mp+div37Fjh23ZsuVc//iMWLNmje3ZsyfoDN7RUOetYd329jP+2/Nbm4P+eVPZ\ncKofnxfersNsRENdNjf8tL3lvL5L7t1337WnnnrKrrjiCps/f77l5uaa2QcLU19fnz5pBgwODoYe\n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\nr3/962Zm9p3vfMfeeOMN6+josI6ODrv22mszPuxktLf7+TlP2YqGugPv8kXfKq5DHQ11NNR5bTjh\nwpRKpeyb3/ymXXrppbZ69WrbsmWLLV++3MzM7r33XqutrbXa2lp77LHHMj7sZDQ1NYUewT0a6mqK\n+KJvFdehjoY6Guq8Npzwn71HjhyxI0eOmJnZiRMn7NChQ1ZaWprxwabK6Oho6BHco6Eulc4JPYJ7\nXIc6GupoqPPa8Ly+hqmsrMxqa2vtueeeMzOz2267zQ4ePGg7d+60+fPnZ2RA1f79+0OP4B4NdS+f\nyA09gntchzoa6mio89ow18zuPpdfOGfOHHvsscfsb//2b+3gwYN26NAh27Ztm/3whz+0+vp6u/76\n6+3hhx/+2O+59dZb7Z577rFbbrnF7rjjDluxYoU988wz1traaoWFhbZw4UJbu3atHT161Jqbm62m\npsbefvtt27RpkxUUFFhpaak1NTXZW2+9ZRs2bLDKykobGhqyjRs3WiKRsKVLl9pVV11l/f391tra\namVlZTYyMmIbNmwwsw9+wN8NN9xgBw4csNbW1vGPjK1fv95SqZStWLHCVq9ePf77L7roIps1a5at\nW7fOTp06ZQ0NDdbQ0DD++mQyaYWFhdbc3GxDQ0N25ZVXWl1d3fjrp+sxNTY2jr9+Oh5TS0uLLV26\nNKrHNF1vp5GLV9oVyVG7bN6ovfP+DFu1IGVHX3rBxWO6aNZpS6VzrG7BB/8aXHjitUm/nWaVX2aV\nhWNWOXfM3hnJsSuSo5Y4+vpZHtOq8dcX5KZtXuK0rZg3ZkePHrW/+Iu/sIULF44/plkz0nbBzNNW\nXZSyY6M5Vr9g1Oo2fc0WXL3ZWv/7jXbJH99ktf/ta3Zp0dhZ3k4ffM3lxQWnbXlh6n/9nalzekwL\na75gtfNTNjJm44/ppacfO+PtdMmt99o113/Fmr70FZvV9Od2/Z/e+DuPKWUnUjl22byUlc16f9qe\nT6tWrbK5c+dm/bWXzfeI22+/3YaGhqJ6TNP9dqqqqrKqqqqsfEyXXHKJPfroo2fdg3LMbMKf2ZCX\nl2ePPPKItbW12b333nvG68vKyuyRRx6xmpqaj/33HTt22JYtWyb64zOqtrbWOjo6gs7gHQ0nr277\nB1/c+Lk5KXvlvQ8+A/781uw/tO3DuX+XMve5/nmf9ut+9zo826/7JOf790xEeSxnM53XA89lHQ11\n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\nw6TjOtTRUEdDndeG0S9MXs97yCY01HEOk47rUEdDHQ11XhtGvzANDg6GHsE9GuqGUpzDpOI61NFQ\nR0Od14bRL0w9PT2hR3CPhro3T0X/VMs4rkMdDXU01HltGP1dvKGhIfQI7tFQV1k4FnoE97gOdTTU\n0VDntWH0C1NHR0foEdyjoaGb8sYAACAASURBVO6V9ziHScV1qKOhjoY6rw2jX5hKSkpCj+AeDXUc\nK6DjOtTRUEdDndeGEy5MS5YssSeffNJefPFF6+rqsq9//etmZrZgwQJ7/PHH7fDhw/b444/b/Pnz\nMz7sZBQXF4cewT0a6uYnOLhSxXWoo6GOhjqvDSdcmFKplH3zm9+0Sy+91FavXm1btmyx5cuX2113\n3WXt7e1WWVlp7e3tdtddd03HvOfN63kP2YSGOs5h0nEd6mioo6HOa8MJF6YjR46Mf77xxIkTdujQ\nISstLbXrrrvOdu3aZWZmu3btstbW1sxOOklez3vIJjTUcQ6TjutQR0MdDXVeG57X1zCVlZVZbW2t\nPffcc1ZcXGxHjhwxsw+Wqmz9ENvAwEDoEdyjoe7YKOcwqbgOdTTU0VDntWGumd19Lr9wzpw59thj\nj9nf/u3f2sGDB+2uu+6y73//++Ovv/POOz/2/83Mbr31VrvnnnvslltusTvuuMNWrFhhzzzzjLW2\ntlphYaEtXLjQ1q5da0ePHrXm5marqamxt99+2zZt2mQFBQVWWlpqTU1N9tZbb9mGDRussrLShoaG\nbOPGjZZIJGzp0qV21VVXWX9/v7W2tlpZWZmNjIzYhg0bzMysqqrKampqrKenx1pbW8d/fs369est\nlUrZihUrbPXq1eO//6KLLrJZs2bZunXr7NSpU9bQ0GANDQ3jr08mk1ZYWGjNzc02NDRkV155pdXV\n1Y2/froeU2Nj4/jrp+MxLViwwD7/+c9H9Zim6+00cvFKuyI5anPz0jY8lmOrFqTs6EsvBHxMa+zY\naI7VLxi1koLTdmosxxoWjFpeTtqK80/bpUUpe2ckx65IjtpFs05bKp1jdQtGzczs4oLTtrzwo9df\nMPO0Wdps1YKUjaXNls4Zs6rCsfHXz0+ctsQMs9r5KRsZ++Bohcq5H72+MC9tBblpWzkvZafGcuyP\nilK27HdeX5CbtnmJ07Zi3pgdPXrUVq9ebX/wB38w/phmzUjbBTNPW3VRaooeU+qcrr2FNV844zHN\n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\n3/zGvvKVr9jf//3fhx7HtZtvvtkee+yx0GPgM6K0tNRef/318f//xhtv8I4KQZWVlVltba0999xz\noUdxZ8aMGdbR0WFvvfWWPfHEE7Zv377QI52zaBamJ554wjo7O8942bRpk5mZ/d3f/Z1dcskldv/9\n99ttt90WeNrsNFFDM7Nvfetblkql7P777w84afY6l4YA/JozZ479/Oc/t7/5m7/52GcvcG5Onz5t\ntbW1tmTJEmtoaLBLL7009EjnzOePDD6LdevWndOvu//+++3RRx91+cVmmTZRw82bN9vGjRutubl5\nmiby51yvQ5w7jjBBtsjLy7Of//zndv/999tDDz0UehzX3n33XXvqqads/fr19uKLL4Ye55xE8xGm\nT1NRUTH+v6+77jrr7u4OOI1PLS0ttnXrVtu0aZOdOnUq9Dj4DOEIE2SLnTt32qFDh+zee+8NPYpL\nF1544fh3WOfn59u6devcvT8O/pXnmX752c9+lu7s7EwfPHgw/fDDD6dLSkqCz+Tt5eWXX07/5je/\nSXd0dKQ7Ojr4TsNJvLS2tqZff/319PDwcPrIkSPpf/u3fws+k5eXa6+9Nv3SSy+le3p60t/61reC\nz+Pt5YEHHkj39/enR0ZG0q+//nr65ptvDj6Tt5cvfOEL6XQ6nT548OD4ffDaa68NPpenl5qamvSv\nfvWr9MGDB9OdnZ3pb3/728FnOp+XSf8sOQAAgM+Kz8Sn5AAAABQsTAAAABNgYQIAAJgACxMAAMAE\nWJgAAAAmwMIEAAAwARYmAACACbAwAQAATOD/B/QHmecsNONzAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 720x720 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Ub2RwbyXS7Qo",
        "colab_type": "code",
        "outputId": "a20926d3-6d7d-40b6-a99a-ff64babacbec",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 605
        }
      },
      "source": [
        "# 当数据非常非常多的时候，正态分布会体现的非常明显\n",
        "plt.hist(torch.randn(10**6).numpy(), 100);"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "1000000\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAl8AAAI7CAYAAADS2v5RAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0\ndHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAgAElEQVR4nOzdf1DU950/8Cc/FkEDbpY0INhjO4IH\nEVo3ETC0B0ZaF9O7Qu+SFDs9ndavmTZ6vWt6p1xvOmaaq1Od6XnejTHTizXaS8t5yWRi0yA6VKEt\nVYhFhVMGlhNHQEjqgqCI7C77/cNxjSdvMYm+3683Ph8zO3O3i/r69NnXp6/97IfXRgEIg4iIiIi0\niDZdABEREdH9hMMXERERkUYcvoiIiIg04vBFREREpBGHLyIiIiKNOHwRERERaRRruoA79cYbb6C/\nv990GURERERTSk1NxV/91V8pXw/b8Ni+fbvxGkw9nn76aeM18MFsbHswG7kPZiP3wWzu3uN2cws/\ndrRAIBAwXQIpMBu5mI1czEYuZqMHhy8LNDc3my6BFJiNXMxGLmYjF7PRg8OXBYqLi02XQArMRi5m\nIxezkYvZ6MHhywLt7e2mSyAFZiMXs5GL2cjFbPTg8GWB+Ph40yWQArORi9nIxWzkYjZ6cPiygNvt\nNl0CKTAbuZiNXMxGLmajB4cvC9TW1pougRSYjVzMRi5mIxez0YPDlwW8Xq/pEkiB2cjFbORiNnIx\nGz04fFlgeHjYdAmkwGzkYjZyMRu5mI0eHL4s0NbWZroEUmA2cjEbuZiNXMxGDw5fFigqKjJdAikw\nG7mYjVzMRi5moweHLwu0traaLoEUmI1czEYuZiMXs9GDw5cFXC6X6RJIgdnIxWzkYjZyMRs9OHxZ\nID093XQJpMBs5GI2cjEbuZiNHhy+LMC9K3IxG7mYjVzMRi5moweHLwtw74pczEYuZiMXs5GL2ehx\nx8NXdHQ0/vCHP+CXv/wlgGtfQXDkyBF0dnaiuroaDocDABAXF4fq6mp0dnbiyJEjyMjIiPwdVVVV\n6OzsRHt7O5YtWxZ53uv1or29HZ2dndiwYcPdOrZpw+/3my6BFJiNXMxGLmYjF7PR446Hr7/927/F\n6dOnI///5s2bsXXrVmRlZWFwcBCrV68GAKxevRqDg4PIysrC1q1bsXnzZgBATk4OKisrsWDBApSV\nleGll15CdHQ0oqOjsX37dixfvhyPPPIIVqxYgZycnLt8mHbz+XymSyAFZiMXs5GL2cjFbPS4o+Er\nPT0dX/ziF/HKK69Enlu6dClef/11AMDu3btRUVEBACgvL8fu3bsBAK+//jpKS0sjz1dXV2N8fBzd\n3d3w+XwoKChAQUEBfD4fzpw5g0AggOrqapSXl9/Vg7RdQUGB6RJIgdnIxWzkYjZyMRs97mj4+td/\n/VesX78eExMTAIDk5GQMDQ0hFAoBAHp6eiK/IZGeno5z584BAEKhEC5evIjk5OSbnv/gn1E9Tze0\ntLSYLoEUmI1czEYuZiMXs9Ejdqof+OIXv4j33nsPf/jDH1BSUqKjpkmlpaWhq6sLly5dQkJCAurr\n67FhwwZ4vV50d3djbGwM2dnZaGhoQH5+PhwOB+rr61FaWhq5jJqZmYm6ujqUlJQgEAigubkZxcXF\naG9vR3x8PNxuN2pra+H1ejE8PIy2tjYUFRWhtbUVLpcL6enpkdf9fn/k6l1LSwvS0tKQkpISeX1g\nYAB9fX3weDxoampCZmYmXC5X5PXe3l74/X7k5eWhsbERubm5SEpKirz+wWMaHx9Hdnb2tDqm6ZJT\nYmIiEhISptUxTZecPvOZz+Dll1+eVsc0XXL60pe+hNdee21aHdN0yekv//Iv8dvf/nZaHZOpnKYS\nvt1j06ZN4XPnzoXPnDkTPn/+fPjy5cvh//zP/wy///774ZiYmDCA8OLFi8P79+8PAwjv378/vHjx\n4jCAcExMTPj9998PAwhXVVWFq6qqIn/v9Z/74J+d7OeuP7Zv337bOqfzY8WKFcZr4IPZ2PZgNnIf\nzEbug9ncvccUc8ud/0UlJSXhX/7yl2EA4b1794a/8pWvhAGEd+zYEf7Wt74VBhB+7rnnwjt27AgD\nCH/lK18J/9d//VcYQPiRRx4JHz9+PBwXFxd2u93hrq6ucHR0dDgmJibc1dUVdrvdYYfDET5+/Hj4\nkUce+bAHMa0fLpfLeA18MBvbHsxG7oPZyH0wm7v3uN3c8pH3fG3YsAHPP/88Ojs7kZycjJ07dwIA\ndu7cieTkZHR2duL5559HVVUVAODUqVPYu3cvTp06hf3792Pt2rWYmJhAKBTCunXrUFtbi9OnT0d+\nhm7g3hW5mI1czEYuZiMXs9Fjynu+Pqi+vh719fUAgDNnzqCwsPCWn7l69SqeeeaZSf/8pk2bsGnT\npluer6mpQU1NzYcp5b4yMDBgugRSYDYyLNpSd8tzA/t/aKASuhPsG7mYjR7ccG+Bvr4+0yWQArOR\ni9nIxWzkYjZ6cPiygMfjMV0CKTAbuZiNXMxGLmajx4f62JHMaGpqMl0CKTAbuS4t/joWef7fTc+9\nu77UUDX0QewbuZiNHrzyZYHMzEzTJZACs5FrTsKE6RJIgX0jF7PRg8OXBVwul+kSSIHZyJUYGzZd\nAimwb+RiNnpw+LJAbW2t6RJIgdnIdWyId1VIxb6Ri9noweHLAty7IhezkesxZ9B0CaTAvpGL2ejB\n4csCvb29pksgBWYj14Vxnt6kYt/IxWz04NnJAn6/33QJpMBs5BoJRpkugRTYN3IxGz04fFkgLy/P\ndAmkwGzkcs8MmS6BFNg3cjEbPTh8WaCxsdF0CaTAbOQ6PcIb7qVi38jFbPTg2ckCubm5OHv2rOky\naBLMRq6MmSG8d/Xm95eTfQckF6/qx76Ri9nowStfFkhKSjJdAikwG7lmxnDPl1TsG7mYjR688mUB\n7l2Ri9noN9nVq8lwz5dc7Bu5mI0evPJlAe5dkYvZyMU9X3Kxb+RiNnpw+LJAd3e36RJIgdnINXCV\npzep2DdyMRs9eHaywNjYmOkSSIHZyBXg92qLxb6Ri9nowZsiLJCdnY2WlhbTZdAkmM29daf3d01m\nbsIEui7fxWLormHfyMVs9OCVLws0NDSYLoEUmI1cbcN8bykV+0YuZqMHhy8L5Ofnmy6BFJiNXFkP\ncMO9VOwbuZiNHhy+LOBwOEyXQArMRq7YKO75kop9Ixez0YPDlwXq6+tNl0AKzEauVn7sKBb7Ri5m\noweHLwuUlvLrT6RiNnItnM09X1Kxb+RiNnpw+LKAz+czXQIpMBu5zo/x9CYV+0YuZqMHr8sT0X2N\nX7ZNRLrxraEFMjMzTZdACsxGrjnx3LIqFftGLmajB4cvC9TVffRFk3RvMRu5jl/khX2p2DdyMRs9\nOHxZoKSkxHQJpMBs5MpL4g33UrFv5GI2enD4skAgEDBdAikwG7mC4SjTJZAC+0YuZqMHhy8LNDc3\nmy6BFJiNXJ2XYkyXQArsG7mYjR4cvixQXFxsugRSYDZy5fJjR7HYN3IxGz04fFmgvb3ddAmkwGzk\n6rnC05tU7Bu5mI0ePDtZID4+3nQJpMBs5HLw7CYW+0YuZqMHT08WcLvdpksgBWYjV8oM7vmSin0j\nF7PRg8OXBWpra02XQArMRq5jQ9zzJRX7Ri5moweHLwt4vV7TJZACs5HrMedHv+F+0Za6Wx5097Bv\n5GI2evCtoQWGh4dNl0AKzObuudsDzmiIe76kYt/IxWz04JUvC7S1tZkugRSYjVxnR7nnSyr2jVzM\nRg8OXxYoKioyXQIpMBu5chK550sq9o1czEYPDl8WaG1tNV0CKTAbubp55Uss9o1czEYPDl8WcLlc\npksgBWYjV2Js2HQJpMC+kYvZ6MHhywLp6emmSyAFZiNXchz3fEnFvpGL2ejB4csC3LsiF7ORi3u+\n5GLfyMVs9ODwZQHuXZGL2cj1cfZ80b3FvpGL2ejB4csCfr/fdAmkwGzkGglyz5dU7Bu5mI0eHL4s\n4PP5TJdACsxGrvNXeHqTin0jF7PRg2cnCxQUFJgugRSYjVzzE0OmSyAF9o1czEYPDl8WaGlpMV0C\nKTAbubouc8+XVOwbuZiNHhy+LJCWlma6BFJgNnJx1YRc7Bu5mI0eHL4skJKSYroEUmA2cjkdXLIq\nFftGLmajB4cvC3DvilzMRi7u+ZKLfSMXs9GDw5cFuHdFLmbz0SzaUnfL427jni+52DdyMRs9OHxZ\nYGBgwHQJpMBs5BoKcM+XVOwbuZiNHrwub4G+vj7TJZACs5HrwvjdfW852dW5d9eX3tV/437BvpGL\n2ejBK18W8Hg8pksgBWYj17xZ3PMlFftGLmajB4cvCzQ1NZkugRSYjVwdI9zzJRX7Ri5mo8eUw9eM\nGTNw9OhRHD9+HG1tbXjhhRcAALt27cL//u//oqWlBS0tLfjMZz4T+TPbtm1DZ2cnTpw4cdMUvXLl\nSnR0dKCjowMrV66MPP/oo4/i5MmT6OzsxLZt2+7i4U0PmZmZpksgBWYj15wE7vmSin0jF7PRY8p7\nvq5evYqlS5fi8uXLiI2NxW9/+1vU1NQAAP7hH/4Bb7zxxk0/v3z5cmRlZSErKwuFhYXYsWMHFi9e\njAcffBAbN27EokWLEA6HcezYMezbtw9DQ0PYsWMH1qxZg6NHj+Kdd95BWVkZ9u/ff2+O2EIul8t0\nCaTAbORKjOWeL6nYN3IxGz3u6GPHy5cvAwAcDgccDgfCYfVJrby8HHv27AEAHD16FE6nE6mpqfB6\nvTh48CAGBwcxNDSEgwcPoqysDKmpqUhKSsLRo0cBAHv27EFFRcXHPa5phXtX5GI2cnHPl1zsG7mY\njR53NHxFR0ejpaUF7733Hg4ePBj5TPiHP/whTpw4gX/5l39BXFwcACA9PR3nzp2L/Nmenh6kp6ff\n9vmenp5bnqcbuHdFLmYjF/d8ycW+kYvZ6HFHbw0nJibg8Xgwe/ZsvPnmm1iwYAH+8R//Ef39/YiL\ni8NPfvITbNiwAS+++OI9KzQtLQ1dXV24dOkSEhISUF9fjw0bNsDr9aK7uxtjY2PIzs5GQ0MD8vPz\n4XA4UF9fj9LSUvh8PgDXPsuuq6tDSUkJAoEAmpubUVxcjPb2dsTHx8PtdqO2thZerxfDw8Noa2tD\nUVERWltb4XK5kJ6eHnnd7/fD5/OhoKAALS0tSEtLQ0pKSuT1gYEB9PX1wePxoKmpCZmZmXC5XJHX\ne3t74ff7kZeXh8bGRuTm5iIpKSny+gePaXR0FBUVFdPqmKZLTjNnzoTH45lWx6Qjp9ykIJLjJnBs\nKBaPOYMYCUbh/JVozE8MoetyDJLjJuB0hCOvDwWicGE8GvNmhdAxEoM5CRNIjL3x+oXxaIwEo+Ce\nGcLpkVhkzAzh4RkTeCB2Ao85gxi4Go3ABDA3YQJtw7HIeiCE2KgwWodjsXB2EOfHrr0PnRM/geMX\nY5GXFEQwHIXOSzHITQqi50o0HNFAyowbNY+GovB+Rsa0zuleHVNGRgYyMjKm1TFNl5wyMjJQXFw8\nrY7JVE63EwXgQ90Y8f3vfx+jo6P48Y9/HHmupKQEf//3f4+/+Iu/wMsvv4zDhw+juroaANDe3o4l\nS5ZEHt/85jcBIPJzhw8fxqFDh5CTkwMAqKysvOnnrtu+fTvWrl37YUqdNnJzc9HW1ma6DJoEs/lo\n7sVG+/8rY2YIZ0fv7W88cs/XR8O+kYvZ3D23m1um/NjxoYcewuzZswEA8fHx+MIXvoD29nakpqZG\nfqaioiIS1r59+yK/yVhYWIiLFy+iv78ftbW1WLZsGZxOJ5xOJ5YtW4ba2lr09/djeHgYhYWFAK79\nRuRbb7318Y54msnLyzNdAikwG7ncM7nnSyr2jVzMRo8pP3acM2cOdu/ejZiYGERHR2Pv3r341a9+\nhbq6OnziE59AVFQUjh8/HrlS9c477+DJJ5+Ez+fD6Ogovv71rwMABgcH8eKLL6K5uRkA8IMf/ACD\ng4MAgOeeew6vvvoqEhISUFNTE/ltSrqmsbHRdAmkwGzkOj3CG+6lYt/IxWz0mPLs1NraikcfffSW\n50tL1Zfb161bN+nzu3btwq5du255/tixY5y2byM3Nxdnz541XQZNgtnIlTEzhPeuco+0ROwbuZiN\nHjwzWSApKcl0CaTAbOSaGcM9X1Kxb+RiNnpw+LIA967IxWzk4p4vudg3cjEbPTh8WYB7V+RiNnJx\nz5dc7Bu5mI0eHL4s0N3dbboEUmA2cg3wfi+x2DdyMRs9eHaywNjYmOkSSIHZyBXg92qLxb6Ri9no\nweHLAtnZ2aZLIAVmI9fcBE5fUrFv5GI2enD4skBDQ4PpEkiB2cjVNswb7qVi38jFbPTg8GWB/Px8\n0yWQArORK+sBbriXin0jF7PRg8OXBRwOh+kSSIHZyBUbxT1fUrFv5GI2enD4skB9fb3pEkiB2cjV\nyo8dxWLfyMVs9ODwZYHbfZUTmcVs5Fo4m3u+pGLfyMVs9OBbQwv4fD7TJZACs5naoi11Rv7d82N8\nbykV+0YuZqMHz05EREREGvHKlwUyMzPR3NxsugyaBLORa078BDou3dt/Y7Kreu+u58c2U2HfyMVs\n9OCVLwvU1Zn52IamxmzkOn6R7y2lYt/IxWz04PBlgZKSEtMlkAKzkSsviTfcS8W+kYvZ6MHhywKB\nQMB0CaTAbOQKhqNMl0AK7Bu5mI0eHL4swM/f5WI2cnVeijFdAimwb+RiNnpw+LJAcXGx6RJIgdnI\nlcuPHcVi38jFbPTg8GWB9vZ20yWQArORq+cKT29SsW/kYjZ68Oxkgfj4eNMlkAKzkcvBs5tY7Bu5\nmI0ePD1ZwO12my6BFJiNXCkzJkyXQArsG7mYjR4cvixQW1trugRSYDZyHRvini+p2DdyMRs9OHxZ\nwOv1mi6BFJiNXI85ecO9VOwbuZiNHhy+LDA8PGy6BFJgNnKNhrjnSyr2jVzMRg8OXxZoa2szXQIp\nMBu5zo5yz5dU7Bu5mI0eHL4sUFRUZLoEUmA2cuUk8mNHqdg3cjEbPTh8WaC1tdV0CaTAbOTq5pUv\nsdg3cjEbPTh8WcDlcpkugRSYjVyJsWHTJZAC+0YuZqMHhy8LpKenmy6BFJiNXMlx3PMlFftGLmaj\nB4cvC3DvilzMRi7u+ZKLfSMXs9GDw5cFuHdFLmYjF/d8ycW+kYvZ6MHhywJ+v990CaTAbOQaCXLP\nl1TsG7mYjR68Lm8Bn89nugRSYDZynb9i5r3loi11kz7/7vpSzZXIxb6Ri9nowStfFigoKDBdAikw\nG7nmJ4ZMl0AK7Bu5mI0eHL4s0NLSYroEUmA2cnVd5p4vqdg3cjEbPfixowXS0tLQ3t5uugyaBLO5\nmeojNxOS4ybQc4UDmETsG7mYjR688mWBlJQU0yWQArORy+ngklWp2DdyMRs9OHxZgHtX5GI2cnHP\nl1zsG7mYjR4cvizAvStyMRu5uOdLLvaNXMxGDw5fFhgYGDBdAikwG7mGAtzzJRX7Ri5moweHLwv0\n9fWZLoEUmI1cF8Z5epOKfSMXs9GDZycLeDwe0yWQArORa94s7vmSin0jF7PRg8OXBZqamkyXQArM\nRq6OEa6ZkIp9Ixez0YPDlwUyMzNNl0AKzEauOQkTpksgBfaNXMxGDw5fFnC5XKZLIAVmI1diLPd8\nScW+kYvZ6MHhywLcuyIXs5GLe77kYt/IxWz04PBlAe5dkYvZyMU9X3Kxb+RiNnpw+LJAb2+v6RJI\ngdnIxVUTcrFv5GI2evDsZAG/32+6BFJgNnKNBLlkVSr2jVzMRg8OXxbIy8szXQIpMBu53DO550sq\n9o1czEYPDl8WaGxsNF0CKTAbuU6P8IZ7qdg3cjEbPTh8WSA3N9d0CaTAbOTK4JUvsdg3cjEbPTh8\nWSApKcl0CaTAbOSaGcM9X1Kxb+RiNnpw+LIA967IxWzk4p4vudg3cjEbPTh8WYB7V+RiNnJxz5dc\n7Bu5mI0eHL4s0N3dbboEUmA2cg1c5elNKvaNXMxGjynPTjNmzMDRo0dx/PhxtLW14YUXXgAAuN1u\nHDlyBJ2dnaiurobD4QAAxMXFobq6Gp2dnThy5AgyMjIif1dVVRU6OzvR3t6OZcuWRZ73er1ob29H\nZ2cnNmzYcJcP0X5jY2OmSyAFZiNXgN+rLRb7Ri5mo8eUw9fVq1exdOlSLFy4EAsXLkRZWRkKCwux\nefNmbN26FVlZWRgcHMTq1asBAKtXr8bg4CCysrKwdetWbN68GQCQk5ODyspKLFiwAGVlZXjppZcQ\nHR2N6OhobN++HcuXL8cjjzyCFStWICcn594etWWys7NNl0AKzEauuQmcvqRi38jFbPS4o+vyly9f\nBgA4HA44HA6Ew2EsXboUr7/+OgBg9+7dqKioAACUl5dj9+7dAIDXX38dpaWlkeerq6sxPj6O7u5u\n+Hw+FBQUoKCgAD6fD2fOnEEgEEB1dTXKy8vv+oHarKGhwXQJpMBs5Gob5g33UrFv5GI2etzR2Sk6\nOhrHjh1DZmYmtm/fjq6uLgwNDSEUurZHp6enB+np6QCA9PR0nDt3DgAQCoVw8eJFJCcnIz09HUeO\nHIn8nR/8M9d//vrzhYWFt9SQlpaGrq4uXLp0CQkJCaivr8eGDRvg9XrR3d2NsbExZGdno6GhAfn5\n+XA4HKivr0dpaSl8Ph8AIDMzE3V1dSgpKUEgEEBzczOKi4vR3t6O+Ph4uN1u1NbWwuv1Ynh4GG1t\nbSgqKkJraytcLhfS09Mjr/v9/sgA2dLSgrS0NKSkpEReHxgYQF9fHzweD5qampCZmQmXyxV5vbe3\nF36/H3l5eWhsbERubi6SkpIir3/wmBwOB4aHh6fVMU2XnB5++GE0NDRMq2P6ODmVPDSOnivRcEQD\nKTMmcGwoFo85gxgNReHsaAxyEoPoHo1BYmwYyXE3Xh8JRuH8lWjMTwyh63IMkuMm4HSEI68PBaJw\nYTwa82aF0DESgzkJE0iMvfH6hfFojASj4J4ZwumRWGTMDGH+A0G8dX4GHnMGMXA1GoGJa1fD2oZj\nkfVACLFRYbQOx2Lh7CDOj117HzonfgLHL8YiLymIYDgKnZdikJsUvCvHlLR0qZicTP937+mnn8ZP\nf/rTaXVM0yWnZ599FnV1ddPqmEzldDtRAO54Gc7s2bPx5ptv4vvf/z5effVVZGVlAQDmzp2Lmpoa\n5OXlobW1FWVlZZEv5/T5fCgsLMQLL7yAI0eO4LXXXgMAvPLKK6ipqQEAlJWVYc2aNQCAr33taygs\nLMTf/M3f3PRvb9++HWvXrr3TUqeVp59+Gv/93/9tugyaBLO52aItdaZLiPhc8jh+eyHOdBm39e76\nUtMlGMG+kYvZ3D23m1s+1HX5ixcv4tChQ3j88cfhdDoRExODUCiEuXPnRoat3t5efPKTn0Rvby9i\nYmIwe/ZsXLhwIfL8dR/8M6rn6Zr6+nrTJZDC/ZqNpCFLpZUfO4p1v/aNDZiNHlPe8/XQQw9h9uzZ\nAID4+Hh84QtfwOnTp3Ho0CE89dRTAIBVq1bhrbfeAgDs27cPq1atAgA89dRT+PWvfx15vrKyEnFx\ncXC73cjKykJTUxOam5uRlZUFt9sNh8OByspK7Nu3754crK2u3zdH8jAbuRbO5p4vqdg3cjEbPaZ8\nazhnzhzs3r0bMTExiI6Oxt69e/GrX/0Kp06dQnV1Nf75n/8ZLS0t2LlzJwBg586d+NnPfobOzk74\n/X5UVlYCAE6dOoW9e/fi1KlTCAaDWLt2LSYmrv020rp161BbW4uYmBj89Kc/xalTp+7hIdvn+mfN\nJA+zkev6fVwkD/tGLmajx5TDV2trKx599NFbnj9z5sykN8ZfvXoVzzzzzKR/16ZNm7Bp06Zbnq+p\nqYnc/0VEREQ0nfGtoQUyMzNNl0AKzEauOfHc8yUV+0YuZqMHhy8L1NXJv7n5fsVs5Dp+kTfcS8W+\nkYvZ6MHhywIlJSWmSyAFZiNXXhJvuJeKfSMXs9GDw5cFAoGA6RJIgdnIFQxHmS6BFNg3cjEbPTh8\nWaC5udl0CaTAbOTqvBRjugRSYN/IxWz04PBlgeLiYtMlkAKzkSuXHzuKxb6Ri9noweHLAu3t7aZL\nIAVmI1fPFZ7epGLfyMVs9ODZyQLx8fGmSyAFZiOXg2c3sdg3cjEbPXh6soDb7TZdAikwG7lSZnDP\nl1TsG7mYjR4cvixQW1trugRSYDZyHRvini+p2DdyMRs9OHxZwOv1mi6BFJiNXI85ecO9VOwbuZiN\nHhy+LDA8PGy6BFJgNnKNhrjnSyr2jVzMRg8OXxZoa2szXQIpMBu5zo5yz5dU7Bu5mI0eHL4sUFRU\nZLoEUmA2cuUk8mNHqdg3cjEbPTh8WaC1tdV0CaTAbOTq5pUvsdg3cjEbPTh8WcDlcpkugRSYjVyJ\nsWHTJZAC+0YuZqMHhy8LpKenmy6BFJiNXMlx3PMlFftGLmajB4cvC3DvilzMRi7u+ZKLfSMXs9GD\nw5cFuHdFLmYjF/d8ycW+kYvZ6MHhywJ+v990CaTAbOQaCXLPl1TsG7mYjR4cvizg8/lMl0AKzEau\n81d4epOKfSMXs9GDZycLFBQUmC6BFJiNXPMTQ6ZLIAX2jVzMRg8OXxZoaWkxXQIpMBu5ui5zz5dU\n7Bu5mI0eHL4skJaWZroEUmA2cnHVhFzsG7mYjR4cviyQkpJiugRSYDZyOR1csioV+0YuZqMHhy8L\ncO+KXMxGLu75kot9Ixez0YNnJwt4vV784he/MF0GTeJ+yGbRljrTJXwkjzmDqP9jnOkybmuy/2zf\nXV9qoBK97oe+sRWz0YNXviwwMDBgugRSYDZyDQW450sq9o1czEYPDl8W6OvrM10CKTAbuS6M8/Qm\nFftGLmajB89OFvB4PKZLIAVmI9e8WdzzJRX7Ri5moweHLws0NTWZLoEUmI1cHSPc8yUV+0YuZqMH\nhy8LZGZmmi6BFJiNXHMSuOdLKvaNXMxGDw5fFnC5XKZLIAVmI1diLPd8ScW+kYvZ6MHhywLcuyIX\ns5GLe77kYt/IxWz04PBlAa/Xa7oEUmA2cj3mDJougRTYN3IxGz04fFmgt7fXdAmkwGzk4qoJudg3\ncjEbPXh2soDf7zddAikwGz7XQ2UAACAASURBVLlGglyyKhX7Ri5moweHLwvk5eWZLoEUmI1c7pnc\n8yUV+0YuZqMHhy8LNDY2mi6BFJiNXKdHeMO9VOwbuZiNHhy+LJCbm2u6BFJgNnJl8MqXWOwbuZiN\nHhy+LJCUlGS6BFJgNnLNjOGeL6nYN3IxGz04fFmAe1fkYjZycc+XXOwbuZiNHhy+LMC9K3IxG7m4\n50su9o1czEYPDl8W6O7uNl0CKTAbuQau8vQmFftGLmajB89OFhgbGzNdAikwG7kC/F5tsdg3cjEb\nPTh8WSA7O9t0CaTAbOSam8DpSyr2jVzMRg8OXxZoaGgwXQIpMBu52oZ5w71U7Bu5mI0eHL4skJ+f\nb7oEUmA2cmU9wD1fUrFv5GI2enD4soDD4TBdAikwG7lio7jnSyr2jVzMRg8OXxaor683XQIpMBu5\nWvmxo1jsG7mYjR4cvixQWlpqugRSYDZyLZzNPV9SsW/kYjZ6cPiygM/nM10CKTAbuc6P8fQmFftG\nLmajB89ORERERBpx+LJAZmam6RJIgdnINSeee76kYt/IxWz04PBlgbq6OtMlkAKzkev4Rd5wLxX7\nRi5moweHLwuUlJSYLoEUmI1ceUm84V4q9o1czEaPKd8azp07F3v27EFKSgrC4TB+8pOf4N/+7d+w\nceNGrFmzBu+//z4A4Hvf+x5qamoAAFVVVVi9ejVCoRC+/e1v48CBAwCufVv6tm3bEBMTg1deeQWb\nN28GALjdblRXVyM5ORnHjh3DX//1XyMQCNyrY7YO/7OQa7pls2jL9HnXGwxHmS7hI5ksg3fXT6/f\nQJtufTOdMBs9przyFQwG8d3vfhcLFizA4sWLsXbtWuTk5AAAtm7dCo/HA4/HExm8cnJyUFlZiQUL\nFqCsrAwvvfQSoqOjER0dje3bt2P58uV45JFHsGLFisjfs3nzZmzduhVZWVkYHBzE6tWr7+Eh26e5\nudl0CaTAbOTqvBRjugRSYN/IxWz0mHL46u/vR0tLCwDg0qVLOH36NNLT05U/X15ejurqaoyPj6O7\nuxs+nw8FBQUoKCiAz+fDmTNnEAgEUF1djfLycgDA0qVL8frrrwMAdu/ejYqKirtxbNNGcXGx6RJI\ngdnIlcuPHcVi38jFbPSIAfDCnf5wRkYGvve97+Gf/umf8Pjjj+PZZ5/FN77xDeTn56OhoQFjY2P4\nyle+glOnTqG1tRUAsGTJEgwMDCApKQkPP/wwfvnLXwK49lFjTk4Ompqa8LWvfQ3btm2L/Dvf+ta3\nsGPHjpv+7TVr1mDTpk1YvXo1nn/+eXz605/G7373O1RUVCAxMRGf+MQn8MQTT2BwcBClpaXIy8vD\nH//4R3zpS19CQkIC0tPTUVJSgvfeew9PPvkk5s+fj5GREfz5n/85HA4HPvWpT+HP/uzP0NfXh4qK\nCmRkZGB8fBxPPvkkgGvf9F5UVBR5/foAWlZWhmAwiE9/+tNYvHhx5PWHH34YM2bMwBe+8AVcuXIl\nMoBef93lciExMRGlpaUYGRnB5z73OSxatCjy+geP6f3338enP/3paXVM0yWnqKgoxMbGTqtjSogJ\nY7ZjAp+eHcSlYBQ+MzsI98wQLgajsNgVwIzoMJLjJpCbFMRQIAr5DwaQljCBK6EoFDwYQGxUGCnx\nE1iQFMSF8Sg87grg4RkTCIajsOjBax9pfDJhAjmJN15PjpsAwsBjDwYRCgOfmhVCdmIo8rrTMQFH\nNOBxBjEeAuYnhjD/gRuvJ8aGkRATxsLZQVwJReGRpCAenjGBnrFoPO4KWH9Mfcd/O6366TOf+QzO\nnz8/rY5pupz3Pve5zyEuLm5aHZOpnP7kT/4E77zzzqTzVBSAO/oCtFmzZqG+vh4//OEP8eabb+Lh\nhx/GH//4R4TDYbz44ouYM2cOVq9ejX//93/HkSNH8NprrwEAXnnllchHkmVlZVizZg0A4Gtf+xoK\nCwvxwgsv4MiRI8jKygJw7R6zmpoa5OXl3fTvb9++HWvXrr2TUqedxx9/HL///e9Nl0GTmG7ZTKd7\nvrITg2gfmR6/8Tjd7vmabn0znTCbu+d2c8sd/bZjbGws3njjDbz22mt48803AQDvvfceJiYmEA6H\n8R//8R8oKCgAAPT29uKTn/xk5M/OnTsXvb29yucvXLgAp9OJmJiYm56nG9xut+kSSIHZyJUyg3u+\npGLfyMVs9Lij4Wvnzp04ffo0tm7dGnkuNTU18n9/+ctfRltbGwBg3759qKysRFxcHNxuN7KystDU\n1ITm5mZkZWXB7XbD4XCgsrIS+/btAwAcOnQITz31FABg1apVeOutt+7aAU4HtbW1pksgBWYj17Gh\n6XHVazpi38jFbPSYcvj67Gc/i5UrV2Lp0qVoaWlBS0sLli9fji1btuDkyZM4ceIEnnjiCXznO98B\nAJw6dQp79+7FqVOnsH//fqxduxYTExMIhUJYt24damtrcfr06cjPAMCGDRvw/PPPo7OzE8nJydi5\nc+e9PWrLeL1e0yWQArOR6zEnb7iXin0jF7PRY8q3hr/73e8QFXXrvpzr93FNZtOmTdi0adOkf2ay\nP3fmzBkUFhZOVcp9a3h42HQJpMBs5BoN2bnn637AvpGL2ejBDfcWuP6RLsnDbOQ6O8o9X1Kxb+Ri\nNnpw+LJAUVGR6RJIgdnIlZPIjx2lYt/IxWz04PBlges700geZiNXN698icW+kYvZ6MHhywIul8t0\nCaTAbORKjL2jFYZkAPtGLmajB4cvC9zu65zILGYjV3Ic93xJxb6Ri9noweHLAty7IhezkYt7vuRi\n38jFbPTg8GUB7l2Ri9nIxT1fcrFv5GI2enD4soDf7zddAikwG7lGgtzzJRX7Ri5moweHLwv4fD7T\nJZACs5Hr/BWe3qRi38jFbPTg2ckC17+0nORhNnLNTwyZLoEU2DdyMRs9OHxZoKWlxXQJpMBs5Oq6\nzD1fUrFv5GI2enD4skBaWprpEkiB2cjFVRNysW/kYjZ6cPiyQEpKiukSSIHZyOV0cMmqVOwbuZiN\nHhy+LMC9K3IxG7m450su9o1czEYPDl8W4N4VuZiNXNzzJRf7Ri5moweHLwsMDAyYLoEUmI1cQwHu\n+ZKKfSMXs9GDw5cF+vr6TJdACsxGrgvjPL1Jxb6Ri9nowbOTBTwej+kSSIHZyDVvFvd8ScW+kYvZ\n6MHhywJNTU2mSyAFZiNXxwj3fEnFvpGL2ejBXweyQGZmJrq6ukyXQZOwOZtFW+pMl3BPzUmYwPmr\nHMAksrlvpjtmowevfFnA5XKZLoEUmI1cibHc8yUV+0YuZqMHr3xZgHtX5GI2ck2nPV+TXaV8d32p\ngUruDvaNXMxGD175sgD3rsjFbOTini+52DdyMRs9OHxZoLe313QJpMBs5OKqCbnYN3IxGz14drKA\n3+83XQIpMBu5RoJcsioV+0YuZqMHhy8L5OXlmS6BFJiNXO6Z3PMlFftGLmajB4cvCzQ2NpougRSY\njVynR6bPDffTDftGLmajB4cvC+Tm5pougRSYjVwZvPIlFvtGLmajB4cvCyQlJZkugRSYjVwzY7jn\nSyr2jVzMRg8OXxbg3hW5mI1c02nP13TDvpGL2ejB4csC3LsiF7ORi3u+5GLfyMVs9ODwZYHu7m7T\nJZACs5Fr4CpPb1Kxb+RiNnrw7GSBsbEx0yWQArORKzBhugJSYd/IxWz04PBlgezsbNMlkAKzkWtu\nAqcvqdg3cjEbPTh8WaChocF0CaTAbORqG+YN91Kxb+RiNnpw+LJAfn6+6RJIgdnIlfUA93xJxb6R\ni9noweHLAg6Hw3QJpMBs5IqN4p4vqdg3cjEbPTh8WaC+vt50CaTAbORq5ceOYrFv5GI2enD4skBp\naanpEkiB2ci1cDb3fEnFvpGL2ejB4csCPp/PdAmkwGzkOj/G05tU7Bu5mI0ePDsRERERacThywKZ\nmZmmSyAFZiPXnHju+ZKKfSMXs9GDw5cF6urqTJdACsxGruMXecO9VOwbuZiNHhy+LFBSUmK6BFJg\nNnLlJfGGe6nYN3IxGz04fFkgEAiYLoEUmI1cwXCU6RJIgX0jF7PRg8OXBZqbm02XQArMRq7OSzGm\nSyAF9o1czEYPDl8WKC4uNl0CKdiSzaItdbc8prtcfuwoli19cz9iNnpw+LJAe3u76RJIgdnI1XOF\npzep2DdyMRs9eHayQHx8vOkSSIHZyOXg2U0s9o1czEYPnp4s4Ha7TZdACsxGrpQZ3PMlFftGLmaj\nBxfhWKC2ttZ0CaTAbOQ6NjS9T2+T3bf37no7vpePfSMXs9GDV74s4PV6TZdACsxGrsecvOFeKvaN\nXMxGDw5fFhgeHjZdAikwG7lGQ9zzJRX7Ri5moweHLwu0tbWZLoEUmI1cZ0e550sq9o1czEYPDl8W\nKCoqMl0CKTAbuXIS+bGjVOwbuZiNHhy+LNDa2mq6BFJgNnJ188qXWOwbuZiNHlMOX3PnzsWvf/1r\n/M///A/a2trw7W9/GwDw4IMP4sCBA+jo6MCBAwfgdDojf2bbtm3o7OzEiRMn4PF4Is+vXLkSHR0d\n6OjowMqVKyPPP/roozh58iQ6Ozuxbdu2u3l804LL5TJdAikwG7kSY8OmSyAF9o1czEaPKYevYDCI\n7373u1iwYAEWL16MtWvXIicnB1VVVairq8P8+fNRV1eHqqoqAMDy5cuRlZWFrKwsPPvss9ixYweA\na8Paxo0bUVhYiIKCAmzcuDEysO3YsQNr1qyJ/LmysrJ7eMj2SU9PN10CKTAbuZLjuOdLKvaNXMxG\njymHr/7+frS0tAAALl26hNOnTyM9PR3l5eXYvXs3AGD37t2oqKgAAJSXl2PPnj0AgKNHj8LpdCI1\nNRVerxcHDx7E4OAghoaGcPDgQZSVlSE1NRVJSUk4evQoAGDPnj2Rv4uu4d4VuZiNXNN9z5fN2Ddy\nMRs9PtQ9XxkZGfB4PDh69ChSUlLQ398P4NqAlpKSAuDa1Hzu3LnIn+np6UF6evptn+/p6bnlebqB\ne1fkYjZycc+XXOwbuZiNHnf81nDWrFl444038Hd/93cYGRm55fVw+N7eX5GWloauri5cunQJCQkJ\nqK+vx4YNG+D1etHd3Y2xsTFkZ2ejoaEB+fn5cDgcqK+vR2lpKXw+HwAgMzMTdXV1KCkpQSAQQHNz\nM4qLi9He3o74+Hi43W7U1tbC6/VieHgYbW1tKCoqQmtrK1wuF9LT0yOv+/1++Hw+FBQUoKWlBWlp\naUhJSYm8PjAwgL6+Png8HjQ1NSEzMxMulyvyem9vL/x+P/Ly8tDY2Ijc3FwkJSVFXv/gMU1MTKCi\nomJaHdN0ycnpdMLj8Yg/ptyHxnFsKBaPOYO4MB6NkWAU3DNDOD0Si4yZIcyMCUdeH7gajcAEMDdh\nAm3Dsch6IITYqDBah2OxcHYQ58euvWebEz+B4xdjkZcURDAchc5LMchNCqLnSjQc0de+3uf63zka\nisLZ0RjkJAbRPRqDxNgwkuNuvD4SjML5K9GYnxhC1+UYJMdNwOm4UdNQIAoXxqMxb1YIHSMxmJMw\ngcTY8G2PaU58CA/ETkyrY5oqp089/bS4/+5N1k/z5s1DRkbGfXGOsO2Y5s2bh+Li4ml1TKZyup0o\nAFNOTbGxsXj77bdRW1uLrVu3Arj2zedLlixBf38/UlNTcfjwYWRnZ+Pll1/G4cOHUV1dfdPPXX98\n85vfBIDIzx0+fBiHDh1CTk4OAKCysvKmn7tu+/btWLt27VSlTkvz5s1DV1eX6TJoErZkM9lX0Ux3\nc2aEcP7q/fUbj7Z8vZAtfXM/YjZ3z+3mljv62HHnzp04ffp0ZPACgH379mHVqlUAgFWrVuGtt96K\nPH/9NxkLCwtx8eJF9Pf3o7a2FsuWLYPT6YTT6cSyZctQW1uL/v5+DA8Po7CwEMC134i8/nfRNQUF\nBaZLIAVmI9f8xJDpEkiBfSMXs9Fjyo8dP/vZz2LlypU4efJk5Mb7733ve/jRj36EvXv3YvXq1Th7\n9iyeeeYZAMA777yDJ598Ej6fD6Ojo/j6178OABgcHMSLL76I5uZmAMAPfvADDA4OAgCee+45vPrq\nq0hISEBNTQ1qamruycHa6vp/7iQPs5Gr6/L9ddXLJuwbuZiNHlMOX7/73e8QFTX5d6R9/vOfn/T5\ndevWTfr8rl27sGvXrlueP3bsGPLy8qYq5b6VlpaG9vZ202XQJJiNXMlxE+i5wgFMIvaNXMxGD264\nt8D13yQleZiNXE4Hl6xKxb6Ri9noweHLAty7IhezkYt7vuRi38jFbPTg8GUB7l2Ri9nIxT1fcrFv\n5GI2enD4ssDAwIDpEkiB2cg1FJj8XlUyj30jF7PRg8OXBfr6+kyXQArMRq4L4zy9ScW+kYvZ6MGz\nkwU8Ho/pEkiB2cg1bxb3fEnFvpGL2ejB4csCTU1NpksgBWYjV8cI10xIxb6Ri9noweHLApmZmaZL\nIAVmI9echAnTJZAC+0YuZqMHhy8LuFwu0yWQArORKzGWe76kYt/IxWz04PBlAe5dkYvZyMU9X3Kx\nb+RiNnpw+LIA967IxWzk4p4vudg3cjEbPTh8WaC3t9d0CaTAbOTiqgm52DdyMRs9eF3eAn6/33QJ\npCAxm0Vb6kyXIMJIkEtWpZLYN3QNs9GDbw0tkJeXZ7oEUmA2crlncs+XVOwbuZiNHhy+LNDY2Gi6\nBFJgNnKdHuGFfanYN3IxGz14drJAbm4uzp49a7oMmgSzkStjZgjvXb2/3l9O9pHzu+tLDVRye+wb\nuZiNHvfXmclSSUlJpksgBWYj18wY7vmSin0jF7PRg8OXBbh3RS5mIxf3fMnFvpGL2ejB4csC3Lsi\nF7ORi3u+5GLfyMVs9ODwZYHu7m7TJZACs5Fr4D6738sm7Bu5mI0ePDtZYGxszHQJpMBs5Arwe7XF\nYt/IxWz04PBlgezsbNMlkAKzkWtuAqcvqdg3cjEbPTh8WaChocF0CaTAbORqG+YN91Kxb+RiNnpw\n+LJAfn6+6RJIgdnIlfUAN9xLxb6Ri9noweHLAg6Hw3QJpMBs5IqN4p4vqdg3cjEbPTh8WaC+vt50\nCaTAbORq5ceOYrFv5GI2enD4skBpqbyvB6FrmI1cC2dzz5dU7Bu5mI0eHL4s4PP5TJdACsxGrvNj\nPL1Jxb6Ri9nowbMTERERkUYcviyQmZlpugRSYDZyzYnnni+p2DdyMRs9OHxZoK6uznQJpMBs5Dp+\nkTfcS8W+kYvZ6MHhywIlJSWmSyAFZiNXXhJvuJeKfSMXs9GDw5cFAoGA6RJIgdnIFQxHmS6BFNg3\ncjEbPTh8WaC5udl0CaTAbOTqvBRjugRSYN/IxWz04PBlgeLiYtMlkAKzkSuXHzuKxb6Ri9noweHL\nAu3t7aZLIAVmI1fPFZ7epGLfyMVs9ODZyQLx8fGmSyAFZiOXg2c3sdg3cjEbPXh6soDb7TZdAikw\nG7lSZnDPl1TsG7mYjR4cvixQW1trugRSYDZyHRvini+p2DdyMRs9OHxZwOv1mi6BFJiNXI85ecO9\nVOwbuZiNHhy+LDA8PGy6BFJgNnKNhrjnSyr2jVzMRg8OXxZoa2szXQIpMBu5zo5yz5dU7Bu5mI0e\nHL4sUFRUZLoEUmA2cuUk8mNHqdg3cjEbPXhHqgVaW1tNl0AKprNZtIVfgqvSzStfYpnuG1JjNnpw\n+LKAy+UyXQIpMBu5EmPDpksQYbIB/d31pQYquYF9Ixez0YMfO1ogPT3ddAmkwGzkSo7jni+p2Ddy\nMRs9OHxZgHtX5GI2cnHPl1zsG7mYjR4cvizAvStyMRu5uOdLLvaNXMxGDw5fFvD7/aZLIAVmI9dI\nkHu+pGLfyMVs9ODwZQGfz2e6BFJgNnKdv8LTm1TsG7mYjR48O1mgoKDAdAmkwGzkmp8YMl0CKbBv\n5GI2enD4skBLS4vpEkiB2cjVdZl7vqRi38jFbPTg8GWBtLQ00yWQArORi6sm5GLfyMVs9ODwZYGU\nlBTTJZACs5HL6eCSVanYN3IxGz04fFmAe1fkYjZycc+XXOwbuZiNHhy+LMC9K3IxG7m450su9o1c\nzEaPKYevnTt3YmBg4KYv29y4cSN6enrQ0tKClpYWLF++PPJaVVUVOjs70d7ejmXLlkWe93q9aG9v\nR2dnJzZs2BB53u1248iRI+js7ER1dTUcDsfdOrZpY2BgwHQJpMBs5BoKcM+XVOwbuZiNHlMOX6++\n+irKyspueX7r1q3weDzweDyoqakBAOTk5KCyshILFixAWVkZXnrpJURHRyM6Ohrbt2/H8uXL8cgj\nj2DFihXIyckBAGzevBlbt25FVlYWBgcHsXr16rt8iPbr6+szXQIpMBu5Lozzwr5U7Bu5mI0eU56d\nfvOb39zxxtvy8nJUV1djfHwc3d3d8Pl8KCgoQEFBAXw+H86cOYNAIIDq6mqUl5cDAJYuXYrXX38d\nALB7925UVFR8jMOZnjwej+kSSIHZyDVvFvd8ScW+kYvZ6PGR3xquW7cOJ06cwM6dO+F0OgFc+zb0\nc+fORX6mp6cH6enpyueTk5MxNDSEUCh00/N0s6amJtMlkAKzkatjhHu+pGLfyMVs9PhIvw60Y8cO\nvPjiiwiHw3jxxRfx4x//+J5/XJiWloauri5cunQJCQkJqK+vx4YNG+D1etHd3Y2xsTFkZ2ejoaEB\n+fn5cDgcqK+vR2lpaeTrEjIzM1FXV4eSkhIEAgE0NzejuLgY7e3tiI+Ph9vtRm1tLbxeL4aHh9HW\n1oaioiK0trbC5XIhPT098rrf749c2WtpaUFaWhpSUlIirw8MDKCvrw8ejwdNTU3IzMyEy+WKvN7b\n2wu/34+8vDw0NjYiNzcXSUlJkdc/eEwTExPIy8ubVsc0XXJyOp04cuSIsWO6khBCctwEnI4wjg3F\n4jFnEEOBKFwYj8a8WSF0jMRgTsIEEmNvvH5hPBojwSi4Z4ZweiQWGTNDmBlz4/WBq9EITABzEybQ\nNhyLrAdCiI0Ko3U4FgtnB3F+7Np7tjnxEzh+MRZ5SUEEw1HovBSD3KQgeq5EwxENpMyYiPydo6Eo\nnB2NQU5iEN2jMUiMDSM57sbrI8EonL8SjfmJIXRdjrkrxzRvVhBv98+YVsd0t3JasWKF0X6qqKjA\nz372s/viHGHbMa1YsQINDQ3T6phM5XQ7UQCmXIaTkZGBt99+G3l5ebd9raqqCgDwox/9CACwf/9+\nvPDCCwCAF154IXLv2Ad/7v3330dqaipCoRAWL15808990Pbt27F27dqpSp2WVqxYgV/84hemy6BJ\nmM5m0ZY6Y/+2dCUPjaP+j3GmyxDp3fWlRv99031Daszm7rnd3PKRPnZMTU2N/N9f/vKX0dbWBgDY\nt28fKisrERcXB7fbjaysLDQ1NaG5uRlZWVlwu91wOByorKzEvn37AACHDh3CU089BQBYtWoV3nrr\nrY9S0rTGvStyMRu5uOdLLvaNXMxGjymHr5///Of4/e9/jz/90z/FuXPn8I1vfANbtmzByZMnceLE\nCTzxxBP4zne+AwA4deoU9u7di1OnTmH//v1Yu3YtJiYmEAqFsG7dOtTW1uL06dORnwGADRs24Pnn\nn0dnZyeSk5Oxc+fOe3vEFuLeFbmYjVzc8yUX+0YuZqPHlG8Nv/rVr97y3E9/+lPlz2/atAmbNm26\n5fmamprISooPOnPmDAoLC6cq477W29trugRSYDZycdWEXOwbuZiNHjw7WeBOV32QfsxGrpEgl6xK\nxb6Ri9noweHLApP9ogPJwGzkcs/kni+p2DdyMRs9eEeqBRobG02XQAo6s+FvNn44p0d4epOK5zS5\nmI0evPJlgdzcXNMlkAKzkSuDV77EYt/IxWz04PBlgaSkJNMlkAKzkWtmzJQrDMkQ9o1czEYPDl8W\n4N4VuZiNXNzzJRf7Ri5moweHLwtw74pczEYu7vmSi30jF7PRg28NLdDd3W26BFJgNnINXOV7S5XJ\nfnlD51cOsW/kYjZ68OxkgbGxMdMlkAKzkSswYboCUmHfyMVs9ODwZYHs7GzTJZACs5FrbgKnL6nY\nN3IxGz04fFmgoaHBdAmkwGzkahvmXRVSsW/kYjZ6cPiyQH5+vukSSIHZyJX1APd8ScW+kYvZ6MHh\nywIOh8N0CaTAbOSKjeKeL6nYN3IxGz04fFmgvr7edAmkwGzkauXHjmKxb+RiNnpw+LJAaam+XwGn\nD4fZyLVwNvd8ScW+kYvZ6MHhywI+n890CaTAbOQ6P8bTm1TsG7mYjR48OxERERFpxOHLApmZmaZL\nIAVmI9eceO75kop9Ixez0YPDlwXq6m79KhCSgdnIdfwib7iXin0jF7PRg8OXBUpKSkyXQArMRq68\nJN5wLxX7Ri5moweHLwsEAgHTJZACs5ErGI4yXQIpsG/kYjZ6cPiyQHNzs+kSSIHZyNV5KcZ0CaTA\nvpGL2ejB4csCxcXFpksgBWYjVy4/dhSLfSMXs9GDw5cF2tvbTZdACsxGrp4rPL1Jxb6Ri9nowbOT\nBeLj402XQArMRi4Hz25isW/kYjZ68PRkAbfbbboEUmA2cqXM4J4vqdg3cjEbPTh8WaC2ttZ0CaTA\nbOQ6NsQ9X1Kxb+RiNnpw+LKA1+s1XQIpMBu5HnPyhnup2DdyMRs9OHxZYHh42HQJpMBs5BoNcc+X\nVOwbuZiNHrwub4G2tjbTJZACs5Hr7Cj3fH0Yi7bc+rUy764vvSf/FvtGLmajB698WaCoqMh0CaTA\nbOTKSeTHjlKxb+RiNnpw+LJAa2ur6RJIgdnI1c0rX2Kxb+RiNnrwY0cLuFwu0yWQwr3KZrKPgOjD\nSYwNmy6BFHhOk4vZ6MErXxZIT083XQIpMBu5kuO450sq9o1czEYPDl8W4N4VuZiNXNzzJRf7Ri5m\noweHLwtw74pczEYu7vmSi30jF7PRg8OXBfx+v+kSSIHZyDUS5J4vqdg3cjEbPTh8WcDn85kugRSY\njVznr/D0JhX7Ri5mULVmpAAAG5BJREFUowfPThYoKCgwXQIpMBu55ieGTJdACuwbuZiNHhy+LNDS\n0mK6BFJgNnJ1XeaeL6nYN3IxGz04fFkgLS3NdAmkwGzk4qoJudg3cjEbPTh8WSAlJcV0CaTAbORy\nOrhkVSr2jVzMRg8OXxbg3hW5mI1c3PMlF/tGLmajB4cvC3DvilzMRi7u+ZKLfSMXs9GDw5cFBgYG\nTJdACsxGrqEA93xJxb6Ri9noweHLAn19faZLIAVmI9eFcZ7epGLfyMVs9ODZyQIej8d0CaTAbOSa\nN4t7vqRi38jFbPTg8GWBpqYm0yWQArORq2OEe76kYt/IxWz04PBlgczMTNMlkAKzkWtOAvd8ScW+\nkYvZ6MHhywIul8t0CaTAbORKjOWeL6nYN3IxGz04fFmAe1fkYjZycc+XXOwbuZiNHhy+LMC9K3Ix\nG7m450su9o1czEYPvjW0QG9vr+kSSOFuZLNoS91dqIT+L66akIvnNLmYjR48O1nA7/ebLoEUmI1c\nI0EuWZWKfSMXs9GDV74skJeXh7a2NtNl0CSYjVzumSGcHeW6iY9jsquy764v/dh/L/tGLmajB698\nWaCxsdF0CaTAbOQ6PcL3llKxb+RiNnpMOXzt3LkTAwMDaG1tjTz34IMP4sCBA+jo6MCBAwfgdDoj\nr23btg2dnZ04ceLETZtyV65ciY6ODnR0dGDlypWR5x999FGcPHkSnZ2d2LZt2906rmklNzfXdAmk\nwGzkypjJDfdSsW/kYjZ6TDl8vfrqqygrK7vpuaqqKtTV1WH+/Pmoq6tDVVUVAGD58uXIyspCVlYW\nnn32WezYsQPAtWFt48aNKCwsREFBATZu3BgZ2Hbs2IE1a9ZE/tz//bcISEpKMl0CKTAbuWbGcM+X\nVOwbuZiNHlMOX7/5zW9uuQGvvLwcu3fvBgDs3r0bFRUVkef37NkDADh69CicTidSU1Ph9Xpx8OBB\nDA4OYmhoCAcPHkRZWRlSU1ORlJSEo0ePAgD27NkT+bvoBu5dkYvZyMU9X3Kxb+RiNnp8pHu+UlJS\n0N/fDwDo7+9HSkoKACA9PR3nzp2L/FxPTw/S09Nv+3xPT88tz9PNuHdFLmYjF/d8ycW+kYvZ6HFX\n3hqGw/f+8n5aWhq6urpw6dIlJCQkoL6+Hhs2bIDX60V3dzfGxsaQnZ2NhoYG5Ofnw+FwoL6+HqWl\npfD5fACufWdVXV0dSkpKEAgE0NzcjOLiYrS3tyM+Ph5utxu1tbXwer0YHh5GW1sbioqK0NraCpfL\nhfT09Mjrfr8fPp8PBQUFaGlpQVpaGlJSUiKvDwwMoK+vDx6PB01NTcjMzITL5Yq83tvbC7/fj7y8\nPDQ2NiI3NxdJSUmR1z94TMPDw6ioqJhWxzRdcpoxYwY8Hs/HOqbsxCBSZkzg2FAsHnMGMRqKwtnR\nGOQkBtE9GoPE2DCS4268PhKMwvkr0ZifGELX5Rgkx03A6QhHXh8KROHCeDTmzQqhYyQGcxImkBh7\n4/UL49EYCUbBPTOE0yOxyJgZwsyYG68PXI1GYAKYmzCBtuFYZD0QQmxUGK3DsVg4O4jzY9fes82J\nn8Dxi7HISwoiGI5C56UY5CYF0XMlGo5oGD+mh+Im8EDsxLQ6Jgk5Dc6b97H7ae7cucjIyLgvzhG2\nHdPcuXNRXFw8rY7JVE63EwVgyskpIyMDb7/9NvLy8gAA7e3tWLJkCfr7+5GamorDhw8jOzsbL7/8\nMg4fPozq6uqbfu7645vf/CYARH7u8OHDOHToEHJycgAAlZWVN/3cB23fvh1r166dqtRpyePxoKWl\nxXQZNIm7kQ2XrN4b82YF0XWZHz3ebXdj1QTPaXIxm7vndnPLR/rYcd++fVi1ahUAYNWqVXjrrbci\nz1//TcbCwkJcvHgR/f39qK2txbJly+B0OuF0OrFs2TLU1taiv78fw8PDKCwsBHDtNyKv/110Q3Z2\ntukSSIHZyDU3YcJ0CaTAvpGL2egx5dvCn//851iyZAkeeughnDt3Dhs3bsSPfvQj7N27F6tXr8bZ\ns2fxzDPPAADeeecdPPnkk/D5fBgdHcXXv/51AMDg4CBefPFFNDc3AwB+8IMfYHBwEADw3HPP4dVX\nX0VCQgJqampQU1Nzr47VWg0NDaZLIAVmI1fbMK96ScW+kYvZ6DHl2emrX/3qpM9//vOfn/T5devW\nTfr8rl27sGvXrlueP3bsWOTjTJpcfn4+v29LKGYjV9YDIVzwc4+0ROwbuZiNHjwzWcDhcJgugRSY\njVyxUdzzJRX7Ri5moweHLwvU19ebLoEUmI1crfzYUSz2jVzMRg8OXxYoLf34v11E9wazkWvhbO75\nkop9Ixez0YPDlwWu7xcheZiNXNf3XJE87Bu5mI0ePDsRERERacThywKZmZmmSyAFZiPXnHju+ZKK\nfSMXs9GDw5cF6uq4AV0qZiPX8Yu84V4q9o1czEYPDl8WKCkpMV0CKXzYbBZtqbvlQfdGXhJvuJeK\n5zS5mI0eHL4sEAgETJdACsxGrmA4ynQJpMC+kYvZ6MHhywLXv5aJ5GE2cnVeijFdAimwb+RiNnpw\n+LJAcXGx6RJIgdnIlcuPHcVi38jFbPTgHakWaG9vN10CKTAbuXqu8L3lvTDZfYrvrv9wiznZN3Ix\nGz14drJAfHy86RJIgdnI5eDZTSz2jVzMRg+enizgdrtNl0AKzEaulBnc8yUV+0YuZqMHhy8L1NbW\nmi6BFJiNXMeGeFeFVOwbuZiNHhy+LOD1ek2XQArMRq7HnLzhXir2jVzMRg8OXxYYHh42XQIpMBu5\nRkPc8yUV+0YuZqMHhy8LtLW1mS6BFJiNXGdHuedLKvaNXMxGDw5fFigqKjJdAikwG7lyEvmxo1Ts\nG7mYjR4cvizQ2tpqugRSYDZydfPKl1jsG7mYjR4cvizgcrlMl0AKzEauxNiw6RJIgX0jF7PRg8OX\nBdLT002XQArMRq7kOO75kop9Ixez0YPDlwW4d0UuZiMX93zJxb6Ri9noweHLAty7IhezkYt7vuRi\n38jFbPTg8GUBv99vugRSYDZyjQS550sq9o1czEYPDl8W8Pl8pksgBWYj1/krPL1Jxb6Ri9nowbOT\nBQoKCkyXQArMRq75iSHTJZAC+0YuZqMHhy8LtLS0mC6BFJiNXF2XuedLKvaNXMxGDw5fFkhLSzNd\nAikwG7m4akIu9o1czEYP/i62BVJSUkyXQAq3y2bRljqNldD/5XRwyaouk/13/d31pcqf5zlNLmaj\nB698WYB7V+RiNnJxz5dc7Bu5mI0eHL4swL0rcjEbubjnSy72jVzMRg8OXxYYGBgwXQIpMBu5hgLc\n8yUV+0YuZqMHhy8L9PX1mS6BFJiNXBfGeXqTin0jF7PRg2cnC3g8HtMlkAKzkWveLO75kop9Ixez\n0YPDlwWamppMl0AKzEaujhHu+ZKKfSMXs9GDw5cFMjMzTZdACsxGrjkJ3PMlFftGLmajB4cvC7hc\nLtMlkAKzkSsxlnu+pGLfyMVs9ODwZQHuXZGL2cjFPV9ysW/kYjZ6cPiyAPeuyMVs5OKeL7nYN3Ix\nGz04fFmgt7fXdAmkwGzk4qoJudg3cjEbPXh2soDf7zddAikwG7lGglyyKhX7Ri5moweHLwvk5eWZ\nLoEUmI1c7pnc8yUV+0YuZqMHhy8LNDY2mi6BFJiNXKdHeMO9VOwbuZiNHjw7WSA3Nxdnz541XQZN\n4no2i7bUmS6F/o+MmSG8d5XvLyXiOU0uZqMHhy8LJCUlmS6BFJiNXDNjuOfLJNUbknfXl7JvBGM2\nevBtoQW4d0UuZiMX93zJxb6Ri9noweHLAty7IhezkYt7vuRi38jFbPTg8GWB7u5u0yWQArORa4D3\ne4nFvpGL2ejBs5MFxsbGTJdACsxGrgC/V1ss9o1czEYPDl8WyM7ONl0CKTAbueYmcPqSin0jF7PR\ng8OXBRoaGkyXQArMRq62Yd5wLxX7Ri5moweHLwvk5+ebLoEUmI1cWQ9ww71U7Bu5mI0eHL4s4HA4\nTJdACsxGrtgo7vmSin0jF7PRg8OXBerr602XQArMRq5WfuwoFvtGLmajB4cvC5SWlpougRSYjVwL\nZ3PPl1TsG7mYjR4cvizg8/lMl0AKzEau82M8vUnFvpGL2ejxsc5OZ86cwcmTJ9HS0oLm5mYAwIMP\nPogDBw6go6MDBw4cgNPpjPz8tm3b0NnZiRMnTsDj8USeX7lyJTo6OtDR0YGVK1d+nJKIiIiIRPvY\nbw2feOIJeDyeyG9IVFVVoa6uDvPnz0ddXR2qqqoAAMuXL0dWVhaysrLw7LPPYseOHQCuDWsbN25E\nYWEhCgoKsHHjxpsGNgIyMzNNl0AfsGhLXeRR/K0fKL9AmMyaE889X1LxnCYXs9Hjrt+RWl5ejiVL\nlgAAdu/ejcOHD6Oqqgrl5eXYs2cPAODo0aNwOp1ITU3FkiVLcPDgQQwODgIADh48iLKyMlRXV9/t\n0qxVV8f/cZfq+EXe1C0Vs5Fp0ZY6vOeYwCLP/4s89+563mckBf/3Ro+PdXYKh8M4cOAAwuH/3979\nx0Rd/3EAf8LdKSAgHbpD7pzXwqYNNllf0WyDlslVtmpza/3RYtX6K2nZH+Ksv2o1cmvWlmstN9ea\n1dzKglbcyDbcIpPlmWJQHt+DwSE/8lJAMO/g8/2jPPzqfcoQ3+/X++752N5b3Am9bs99eL34fD73\nPgvvvfce3n//fXg8HgwNDQEAhoaG4PF4AABerxf9/f3J7x0YGIDX67V9/GqlpaXo6enBxMQEcnNz\n0dbWhoaGBgQCAfT29uLixYtYtWoVDh8+jLVr18LlcqGtrQ0bN25MXsMuKyvDoUOHUFNTg3g8jo6O\nDlRXV6O7uxs5OTnw+/0IBoMIBAIYGxtDZ2cnNmzYgJMnT8LtdsPr9Safj8ViCIfDqKqqQigUQmlp\nKTweT/L54eFhDA4OorKyEkePHkVZWRncbnfy+Wg0ilgshoqKCrS3t6O8vByFhYXJ5698TXl5eTh7\n9mxavSaTc1q15BJ+POfEnUUJuF0zODHmhC93Bp1jTqzMn4Yzy8LJMSfWLE4k7ztaljOD4+edqChM\nIGFl4fSEA+WFCQxMZcOVDXgWziR/5uR0FvomHVhdkEDvpAMFTgvFC2afH09k4cxUNm4vmEbPBQeK\nF8ygyGUlnz8Xz8LZS9m4bdE0fh13YFnuDAqcs8+fvZSN8UQW/HnT6Bp3YkXeNPIcs88P/5GN+AyM\nf02r8hM4eGZhWr2mdMmpuvgSgiMLk6/pv253Wv2OMPn3Xn19PVpbW9PqNenK6e9kAZjzZjilpaUY\nHBzE0qVL0draivr6ejQ1NeGWW25J/ptYLAa3243m5mY0Njbiu+++AwB88803aGhowD333IOcnBy8\n9tprAICXX34ZU1NTePPNN//v/7Vnzx4899xzcy3VaI8++ig+//xz3WXQX668zLjeHceRGPfFkYjZ\nyHV1NjzzJQf7zfz5u7nlhu75GhwcBACMjo7i4MGDqKqqwvDwMEpKSgAAJSUlGBkZAQBEo1EsX748\n+b0+nw/RaNT2cZp1+c0MJM/pCYfuEsgGs5GL2cjFfqPGnIevvLw85OfnJ/+7trYWnZ2daGpqQl1d\nHQCgrq4OX3zxBQCgqakp+U7GdevW4fz58xgaGkIwGERtbS2KiopQVFSE2tpaBIPBG31daaW6ulp3\nCWSjvJB7SUnFbORiNnKx36gx53u+PB4PDh48+OcPcTrx0UcfIRgMoqOjAwcOHMAzzzyDvr4+PPbY\nYwCAr776Cg8++CDC4TAmJyfx1FNPAQB+//13vPrqq8lp+5VXXknefE9/6u7u1l0C2RiY4l5SUjEb\nuZiNXOw3asx5+IpEIlizZs01j8diMdx3330pv2fr1q0pH9+3bx/27ds311LSXk5Oju4SyIaLPUQs\nZiMXs5GL/UYNHgIG8Pv9uksgG56F3EtKKmYjF7ORi/1GDQ5fBuA9cHL9eI57SUnFbORiNnKx36jB\n4csA/7RfCOlzZxFvHJaK2cjFbORiv1GDw5cBxsbGdJdANians3SXQDaYjVzMRi72GzV47tcAnZ2d\nuksgG32T3K9IKmYj19XZpPp8VG68qgf7jRocvgywYcMG9PX16S4j41zPB2avLkhg5I8FCqqhf4vZ\nyMVs5GK/UYOXHQ1w8uRJ3SWQjV6eXRGL2cjFbORiv1GDw5cB3G637hLIRoFzzh+NSjcZs5GL2cjF\nfqMGhy8DeL1e3SWQjeIF3K9IKmYjF7ORi/1GDQ5fBuC+K3JxvyK5mI1czEYu9hs1OHwZgPuuyMX9\niuRiNnIxG7nYb9Tg8GWAWCymuwSyMZ7gfkVSMRu5mI1c7DdqcPgyQDgc1l0C2TgzxUNIKmYjF7OR\ni/1GDR4BBqiqqtJdAtm4vWBadwlkg9nIxWzkYr9Rg8OXAUKhkO4SyEbPBe5XJBWzkYvZyMV+owbf\ncmKA0tJSdHd36y4jrV3PbvapFC+YwcAUG4lEzEau68mGHzmkB/uNGjzzZQCPx6O7BLJR5OJmkVIx\nG7mYjVzsN2pw+DIA912Ri/sVycVs5GI2crHfqMHhywDcd0Uu7lckF7ORi9nIxX6jBocvAwwPD+su\ngWyci3O/IqmYjVzMRi72GzU4fBlgcHBQdwlk4+wlHkJSMRu5mI1c7Ddq8AgwQGVlpe4SyMZti7hf\nkVTMRi5mIxf7jRocvgxw9OhR3SWQjV/HuZWBVMxGLmYjF/uNGhy+DFBWVqa7BLKxLHdGdwlkg9nI\nxWzkYr9Rg8OXAdxut+4SyEaBk/sVScVs5GI2crHfqMHNVgzAfVfm11x3s0+F+xXJxWzkmms23PX+\n5mO/UYNnvgzAfVfk4n5FcjEbuZiNXOw3anD4MkA0GtVdAtngW+blYjZyMRu52G/U4BFggFgsprsE\nsjGe4GaRUjEbuZiNXOw3anD4MkBFRYXuEsiGP4/7FUnFbORiNnKx36jBO1IN0N7errsEstE1zkNI\nKmYj13xmw5vw5xf7jRo882WA8vJy3SWQjRX8C14sZiMXs5GL/UYN/mlogMLCQt0lGGs+t5VIJc/B\n/YqkYjZyMRu52G/U4JkvA3DfFbm4l5RczEYuZiMX+40aHL4MwH1X5OJ+RXIxG7mYjVzsN2pw+DJA\nb2+v7hLIxvAfPISkYjZyMRu52G/U4BFggIsXL+ougWzE+fnAYjEbuZiNXOw3avDCuwFWrVqFUCik\nuwxKwZc7g54LuqugVJiNXDc7G24/MXfsN2pw+DLA4cOHdZdghJv9zsZUOsd4CEnFbORiNnKx36jB\ny44GWLt2re4SyMbKfO5XJBWzkYvZyMV+owaHLwO4XC7dJZANZxb3K5KK2cjFbORiv1GDw5cB2tra\ndJdANk7y8olYzEYuZiMX+40aPAIMsHHjRnz88ce6yxBFx/1dqaxZnEDbbwt0l0EpMBu5dGTDm/Cv\nD/uNGjzzZYBwOKy7BLJx5iIPIamYjVzMRi72GzV4BBAREREpxMuOBigrK0NHR4fuMiiFZTkz+HVC\ndxWUCrORS0o2vBR5LfYbNTh8GeDQIRn3N+ki5f6uVI6f5yEkFbORi9nIlen9RhVedjRATU2N7hLI\nRkUhPyBYKmYjF7ORi/1GDQ5fBojH47pLIBsJK0t3CWSD2cjFbORiv1GD534NkEnX3yVfYkzl9IRD\ndwlkg9nIxWzkyqR+oxPPfBmgurpadwlko5yXT8RiNnJJzuY/uw5dszIJ+40aHL4M0N3drbsEsjEw\nxUNIKmYjF7ORi/1GDV52NEBOTo7uEm6KdPiL0sUeIhazkcu0bDJpS4p07TfScPgygN/vx/fff6+7\njBuSDoNWKp6FM+ge110FpcJs5GI2cqVDvzEBhy8DBINB3SWQjR/P8RCSitnIlQ7ZpOvZMPYbNcw/\nAjJAIBAw6oNO0/UsVyp3FvHDm6ViNnKlazbpMJCZ1m9MJWb4CgQCePvtt+FwOLB371688cYbuksS\n46677hJ7MGTSoJVKZdlytP02rLsMSoHZyJVJ2Zg2kEnuN+lExPCVnZ2NPXv2YNOmTRgYGEBHRwea\nmprQ1dWluzQRpOw4nOmDVipVty8HjmRGEzENs5Er07P5N79LVQ9qUvpNuhMxfFVVVSEcDiMSiQAA\nPvnkEzzyyCMcvv6Sn58/Lz+Hw9P8y3FYuksgG8xGLmZz/VSfOZuvfkN/LwuA9qNgy5YtuP/++/Hs\ns88CAJ544gmsW7cO9fX1yX/z5ZdfYtGiRcmvR0dHMTo6qrxWHZYuXZoxr9U0zEYuZiMXs5GL2cyf\nkpISbNmyJeVzIs58XY+HHnpIdwlEREREN0zEVnfRaBTLly9Pfu3z+RCNRjVWRERERHRziBi+Ojo6\nsHLlSvj9frhcLjz++ONoamrSXRYRERHRvBMxfE1PT2Pr1q0IBoPo6urCgQMH8PPPP+suS5wXX3wR\nlmWhuLhYdyl0hV27dqGrqws//fQTPvvsMyxevFh3SRktEAigu7sbp0+fRkNDg+5y6Ao+nw/ffvst\nTp06hc7OTjz//PO6S6KrZGdn49ixY2hubtZdStqzuOQvn89ntbS0WL29vVZxcbH2erhm16ZNmyyH\nw2EBsBobG63GxkbtNWXqys7OtsLhsHXrrbdaLpfLOn78uLV69WrtdXH9uUpKSqzKykoLgJWfn2/9\n8ssvzEfY2rZtm7V//36rublZey3pvESc+aJ/tnv3bmzfvh2WZekuha7S2tqK6elpAMCRI0fg8/k0\nV5S5rty2Jh6PJ7etIRmGhoYQCoUAABMTE+jq6oLX69VcFV3m9XqxefNm7N27V3cpaY/DlwEefvhh\nRKNRnDhxQncp9A+efvppfP3117rLyFherxf9/f3JrwcGBtjchVqxYgUqKyvxww8/6C6F/vLWW29h\n+/btmJmZ0V1K2jNmq4l019raipKSkmsef+mll7Bz507U1tZqqIou+7t8Lr85ZOfOnUgkEti/f7/q\n8oiMsmjRInz66ad44YUXMD4+rrscArB582aMjIzg2LFj3OVeEe3XPrnsV3l5uTU8PGxFIhErEolY\n8Xjc6uvrszwej/bauGZXXV2d1d7ebuXm5mqvJZPX+vXrrZaWluTXO3bssHbs2KG9Lq7Z5XQ6rZaW\nFmvbtm3aa+GaXa+//rrV399vRSIR68yZM9aFCxesDz/8UHtdaby0F8D1L1YkEuEN98JWIBCwTp06\nZS1ZskR7LZm+HA6H1dPTY/n9/uQN93fccYf2urhm1wcffGDt3r1bex1c9qumpoY33N/kxXu+iG7Q\nO++8g4KCArS2tiIUCuHdd9/VXVLG4rY1st1999148sknce+99yIUCiEUCuGBBx7QXRaRciI+25GI\niIgoU/DMFxEREZFCHL6IiIiIFOLwRURERKQQhy8iIiIihTh8ERERESnE4YuIiIhIIQ5fRERERApx\n+CIiIiJS6H861AllyB+b5QAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 720x720 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YXbzAOhqUH-L",
        "colab_type": "code",
        "outputId": "00b11333-9904-409a-e324-f2f003cd941e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 52
        }
      },
      "source": [
        "# 创建两个 1x4 的tensor\n",
        "a = torch.Tensor([[1, 2, 3, 4]])\n",
        "b = torch.Tensor([[5, 6, 7, 8]])\n",
        "\n",
        "# 在 0 方向拼接 （即在 Y 方各上拼接）, 会得到 2x4 的矩阵\n",
        "print( torch.cat((a,b), 0))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[1., 2., 3., 4.],\n",
            "        [5., 6., 7., 8.]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "HLQv2yN3UeRz",
        "colab_type": "code",
        "outputId": "251cfc23-ecf4-4bb2-dd46-617601063cce",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        }
      },
      "source": [
        "# 在 1 方向拼接 （即在 X 方各上拼接）, 会得到 1x8 的矩阵\n",
        "print( torch.cat((a,b), 1))"
      ],
      "execution_count": 0,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "tensor([[1., 2., 3., 4., 5., 6., 7., 8.]])\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "m6UoqOX3Un9z",
        "colab_type": "text"
      },
      "source": [
        "## One more thing ~\n",
        "\n",
        "其实基本操作还有非常非常多，详细可以查阅官方文档。"
      ]
    }
  ]
}